Microsoft MVP Award Nomination


Microsoft Most Valuable Professional (MVP) Logo I am extremely honored to announce that I have been nominated to receive the Microsoft MVP Award for my contributions in C#! Hold on; I have not won the award yet. But to be nominated is really humbling. Thank you very much!

For those of you who may not know, here is a high-level summary of the MVP award:

The Microsoft Most Valuable Professional (MVP) Program recognizes and thanks outstanding members of technical communities for their community participation and willingness to help others. The program celebrates the most active community members from around the world who provide invaluable online and offline expertise that enriches the community experience and makes a difference in technical communities featuring Microsoft products.

MVPs are credible, technology experts from around the world who inspire others to learn and grow through active technical community participation. While MVPs come from many backgrounds and a wide range of technical communities, they share a passion for technology and a demonstrated willingness to help others. MVPs do this through the books and articles they author, the Web sites they manage, the blogs they maintain, the user groups they participate in, the chats they host or contribute to, the events and training sessions where they present, as well as through the questions they answer in technical newsgroups or message boards.

- Microsoft MVP Award Nomination Email

I guess I should start my nomination acceptance speech by profusely thanking Microsoft as well as everyone who nominated me. Unfortunately, I’m not completely certain who those people are. While I could guess (in no particular order: Bill J., Brian H., Glen G., and/or Rob Z.), I would much rather update this post accordingly after I know for certain who to properly thank. I certainly don’t want to leave anyone out!

Please Help

My next task is to provide the MVP Award committee with information and descriptions of my contributions during the past 12 months. For someone who has difficulty remembering what they did just last week, trying to remember something that I did 12 months ago is going to be a real challenge. (Yes, I should do a better job blogging about my activities. I’m just so busy!) Since this is an award about community, I invite and encourage you to participate. Please leave a comment below or send me an email. Help jog my memory by listing anything and everything that you can think of that would apply and/or be important to include in my reply back to the committee. I welcome advice on what to say and how to say it from previous award winners. Again, I greatly appreciate the nomination and welcome any assistance you can provide.

Thanks for visiting and till next time,

Mark A. Wilson

Technorati Tags: ,
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Sunday, May 02, 2010 2:57 PM | Feedback (2)

Carolina Code Camp 2010


Carolina Code Camp "Grow your skills in 2010"

The Enterprise Developers Guild in Charlotte, the Greenville-Spartanburg Enterprise Developers Guild and the Triad Developers Guild have joined with Microsoft and Central Piedmont Community College (CPCC) Association for Computing Machinery (ACM) to present the 10th MSDN Code Camp to be held in Charlotte. Please join me and fellow developers and code enthusiasts on Saturday, May 15, 2010, at the CPCC Levine Campus in Matthews, NC. The focus this year is Microsoft Visual Studio 2010 and Windows Phone 7. Everyone is invited to attend and/or speak!

Get in-depth exposure to Visual Studio 2010 and other exciting new Microsoft technologies. Sessions will range from presentations, to hands on labs, to informal "chalk talks". We will have a mix of speakers including Microsoft MVPs, authors, and most importantly, local developers just like you! And thanks to the generosity of our contributors, we will be able to provide breakfast, lunch, snacks, and lots of swag.

Registration is open and there are a limited number of seats left. For more information or to register, visit the Carolina Code Camp 2010 event website. I encourage you to "give back" by registering as a volunteer or a proctor. This will be the only Carolina Code Camp held this year – no event is schedule for the fall – so register today before it’s too late!

Thanks for visiting and till next time,

Mark A. Wilson

Technorati Tags:
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Sunday, May 02, 2010 2:04 PM | Feedback (0)

User Group Website Feature List


MousetrapLast week, I talked about the need and desire to build a better mousetrap. And by mousetrap, I mean user group website. If you think about it, a website is a good kind of mousetrap. You want people to easily find it. You want it to be enticing so that they want to learn more and get involved. And you want it to provide quality information so that they keep coming back.

Of course, having a good website alone will not guarantee the success of the user group. That requires a strong leadership team putting on interesting and challenging meetings and events every month. If you build upon this foundation month after month, the world will beat a path to your door. And a quality user group website helps accomplish this.

I’ve been thinking a lot about what features our user group website requires. As I mentioned previously, there are five very basic yet critical goals that I think are a must:

  1. Showcase who, what, where, when.
  2. Build a membership list containing names and email addresses.
  3. Easily communicate with members.
  4. Track meeting registration so you know how many people to expect.
  5. Build an online history.

These goals require the following high-level features:

  1. Clean, minimal site design viewable on “three screens”.
  2. Search engine friendly.
  3. Reduced user interface friction.
  4. Member management.
  5. Communication management.
  6. Event management.
  7. Event registration including both tracking attendance as well as support for cancellations.
  8. Searchable event archive.

I invite you to leave a comment if there is a feature you would like to add to the list above. The next step will be to design a database schema capable of supporting the data required for these features. And as always, leave a comment if you would like to participate.

Thanks for visiting and till next time,

Mark A. Wilson

Technorati Tags: ,,
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Sunday, January 31, 2010 2:03 PM | Feedback (1)

Building a Better Mousetrap


I think it’s time to build a better mousetrap. And by mousetrap, I mean user group website. Every user group needs a website that they can personalize. Very basic information like who, what, where, when needs to be front and center so that new visitors can easily learn about the group. While the focus should be on upcoming meetings/events, it is equally important to showcase the group’s history. This history helps to create an online community and attract new members as well as retain existing members.

Southeast User Group Leadership Summit (SEUGLS) 2009Let me take a step back and explain how I came to this decision. On Saturday, October 24, 2009, Microsoft (Glen Gordon) and O’Reilly (Marsee Henon) hosted the first, of what will hopefully become annual, Southeast User Group Leadership Summit (SEUGLS) 2009 at the Microsoft offices in Alpharetta, GA. The purpose of the event was for technology-based user and community groups in the Southeast to gather, share tips, and discuss the issues and challenges facing technology groups regardless of the actual technology the group is focused on. While your first impression might be a total snooze fest, you would be very wrong. Everyone came with a story to tell and a desire to learn how others manage their user groups. The result was very lively breakout session discussions. All too quickly, the day was over but I think I can safely say that everyone had a lot of fun, learned at lot, and hopefully made some new friends in the process. I personally can’t wait for the next summit!

At one of the breakout sessions that I attended, we discussed the “tools of the trade”. More specifically, how we communicate and collaborate with our members and manage the user group we are active in. We made a very long list of websites and applications that every group is or has used. The one thing that surprised me was that virtually every group used a different set of tools. The obvious reason why is because no one tool had all the features that user groups needed to be successful.

In my opinion, four things are critical in managing a user group:

  1. You have to be able to build a membership list containing names and email addresses.
  2. You have to be able to send members updates via email.
  3. You have to be able to track meeting registration so you know how many people to expect.
  4. You have to be able to build an online history.

You can easily argue there are more things that could be added to this list. However, without accomplishing the first three tasks successfully, I’d argue you probably won’t be around for very long. Granted, there are several free event registration websites that are capable of doing the three tasks. However, very few give you the ability to link events together to show the history of the group much less give you a way to promote that very basic information (the who, what, where, when) front and center so that new visitors can easily learn about the group.

Thus, I think it’s time to build a better mousetrap. This is one way I can give back to the user group community that has given me so much. I plan to keep everyone updated on the progress of this project. Once I have built a solid foundation, I’ll post the solution to the community so that others can contribute. Leave a comment if you would like to participate.

Thanks for visiting and till next time,

Mark A. Wilson

Technorati Tags: ,
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Sunday, January 24, 2010 7:55 PM | Feedback (0)

Deconstructing an ASP.NET MVC Website


Thanks to everyone who attended my presentation “Deconstructing an ASP.NET MVC Website” at the Carolina Code Camp on Saturday, October 10, 2009. I really enjoyed sharing some of the things I learned while building my first ASP.NET MVC website. As promised, I am posing my slide deck and resource links below.

Thanks for visiting and till next time,

Mark A. Wilson

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Sunday, October 18, 2009 6:15 PM | Feedback (1)

Congratulations WNC .NET Developers Guild


1st Birthday Cake Hearty congratulations go out to Dave Kolb and everyone at the WNC .NET Developers Guild. They are celebrating their first anniversary tonight! Happy Birthday Dave!

The WNC .NET Developers Guild is an independent, all volunteer organization, dedicated to promoting Microsoft .NET technology and education to the software developer community of Asheville, NC and the surrounding areas.

Meeting on the second Tuesday of every month, Dave has had a very impressive start over the past twelve months. Their meeting have covered a wide range of developer-centric topics and have been given by some very big name presenters. Tonight’s meeting topic is cloud computing and how you can leverage the knowledge you have about .NET to take advantage of the various cloud technologies including offerings from Microsoft, Google and Amazon. While I can’t be there to help celebrate, I wish Dave and everyone best wishes and best of luck with years of continued success!

Thanks for visiting and till next time,

Mark A. Wilson

Technorati Tags: ,,
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Tuesday, May 12, 2009 8:19 PM | Feedback (0)

Basic HttpWebRequest/Response


A friend recently asked how do you make a call to a web page via code. For example, the web page might be designed to return some data in a text-based format and filtered by query string parameters. (While this is more commonly done using a web service, it can also be accomplished by controlling the output of the HttpResponse object.) The following is a basic demonstration of how you might go about coding this in Visual C#:

   1: /// <summary>
   2: /// Makes a request to a Uniform Resource Identifier (URI) for accessing data from the Internet.
   3: /// </summary>
   4: /// <param name="requestUriString">The URI that identifies the Internet resource.</param>
   5: /// <param name="proxyAddress">The URI of the proxy server.</param>
   6: /// <returns>Returns a response to an Internet request.</returns>
   7: /// <exception cref="System.Exception">Returns a message that describes the current exception.</exception>
   8: /// <example>
   9: ///     GetWebResponse("http://twitter.com/DeveloperInfra", null);
  10: /// </example>
  11: private static System.String GetWebResponse(System.String requestUriString, System.String proxyAddress)
  12: {
  13:     System.Net.WebResponse webResponse = null;
  14:     System.IO.StreamReader stream = null;
  15:     System.String result = null;
  16:  
  17:     try
  18:     {
  19:         /* Initialize the web request. */
  20:         System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(requestUriString);
  21:         /* Optionally specify the User Agent. */
  22:         webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
  23:         /* Optionally create a proxy for the request object to use if you sit behind a firewall. */
  24:         if (System.String.IsNullOrEmpty(proxyAddress) == false)
  25:         {
  26:             System.Net.WebProxy webProxy = new System.Net.WebProxy(proxyAddress);
  27:             webRequest.Proxy = webProxy;
  28:         }
  29:  
  30:         /* Make a synchronous request and convert the response into something we can consume. */
  31:         webResponse = webRequest.GetResponse();
  32:         stream = new System.IO.StreamReader(webResponse.GetResponseStream());
  33:         result = stream.ReadToEnd();
  34:     }
  35:     catch (Exception ex)
  36:     {
  37:         //TODO: Log and handle the exception rather than just pass it back.
  38:         result = System.String.Format("Error: {0}", ex.ToString());
  39:     }
  40:     finally
  41:     {
  42:         /* Clean-up system resources. */
  43:         if (stream != null) { stream.Close(); }
  44:         if (webResponse != null) { webResponse.Close(); }
  45:     }
  46:  
  47:     return result;
  48: }

The first step is to initialize the web request by calling the Create method in the System.Net.HttpWebRequest class. It is preferred to use this method rather than the HttpWebRequest constructor. The method takes one parameter which is the URI for the web page you want to call including any query string parameters. For example, you could use the URI for my Twitter profile: “http://twitter.com/DeveloperInfra”. In the example above, the object that is returned from the method is cast as a System.Net.HttpWebRequest rather than the default generic System.Net.WebRequest object since I can control scheme of the URI. You can also optionally specify the User Agent and/or Proxy based upon your particular requirements.

Now that the web request has been initialized, you can actually make a synchronous request to the web page by calling the GetResponse method. Up until now, you have not actually called any web page or resource. The method returns a WebResponse object that contains the actual response from the web page request. Once you have that, you can quickly stream the data returned out of the object and convert it into a string that can easily be consumed elsewhere. In the case where I have used this code before, we took the XML string that was returned from calling a third-party web page and loaded it into an XmlDocument that was then used to update a SQL Server database table.

Works on My Machine Certification ProgramAs this is my first code example, I must point out the “Works on My Machine Disclaimer” within the sidebar. All postings on this blog are provided “AS IS” with no warranties, confer no rights, and offer exactly zero support. If it deletes files or kills your family pet, you have been warned. It might work great, and it might not. It hasn't been tested against the myriad of other products out there, but it works on my machine. Good luck!

Thanks for visiting and till next time,

Mark A. Wilson

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Sunday, May 10, 2009 10:03 PM | Feedback (0)

Getting Started


Before we can start this journey together, I should take a moment to declare the foundation upon which everything will be built upon going forward. In other words, I need to tell you which languages and frameworks I currently make my living off of and will be blogging about. And I would like to do so without trying to intentionally fan the flames of the already overblown Microsoft vs. [fill-in-the-blank] wars. While I was in college, I thought I could do it all and be an expert in everything. After all, doesn’t every college grad think they will rule the world one day? Thus I took language courses in Assembly, C/C++, Pascal, COBOL, Visual Basic, Java, and HTML. While admittedly I was not an expert in any of them, I felt I had a good enough understanding of each to be successful coding almost any language after I graduated. However, not too long out of college, I quickly realized that I cannot be an expert in all things. (Shocking, huh?) I needed to quickly make a decision as to where I wanted to take my career. My decision was to focus on Microsoft-based solutions. Right or wrong, it was my decision and one that I have been extremely happy with. More on that another time. Today, I specialize in software development using the Microsoft .NET Framework, Visual C#, ASP.NET, and SQL Server.

With a solid foundation beneath us, I have two tips and tricks I’d like to share with those of you who may be new to software development and/or looking for a way to get a Microsoft-based development environment up and running quickly. Obviously, the first thing you will need is a computer. The more powerful and larger the computer, the better. If your computer has 2 GB of RAM or less, I would recommend using the Microsoft Web Platform Installer to setup your development environment.

The Microsoft Web Platform Installer is a free tool that makes it simple to download, install and keep up-to-date with the latest components of the Microsoft Web Platform, including Internet Information Services (IIS), SQL Server Express, .NET Framework and Visual Web Developer.

What is even more amazing is that not only will it download and install everything listed above, but it will also install popular ASP.NET and PHP applications! Everything you need to get your apps running in just a few clicks. Congrats to the Microsoft IIS and Web Platform teams for reaching out to the community and making something that just works!

If your computer has 2 or more GB of RAM, you might want to consider using a virtual machine to host your development environment. Microsoft Virtual PC and VMware Workstation are likely the most popular virtualization programs currently being offered. Both programs host virtual machines that can run their own operating system and applications just like a “real” computer. It’s a computer within a computer! By “virtualizing” your development environment, you can safely use beta tools and code without polluting – or worse, corrupting – your day-to-day computer. You can also safely format and reinstall your day-to-day computer without loosing your development environment.

What is even more amazing is that Microsoft makes it easy to get your hands on pre-installed and configured virtual machines! Better yet, they are free*! Simply go to the Microsoft Download Center and search for “VHD”. Then search through the results for the latest virtual hard disk image of the version of Microsoft Visual Studio that you want to use. After you download and extract the virtual machine, you will have everything you need to get your apps running in a virtual development environment.

*A word of warning before you start thinking a virtual machine is the cure for something it is not. For starters, with virtualization comes performance degradation. Virtual machines run slower than their “real” counterparts. Depending upon the specifications of your computer, you might not find working with a virtual machine enjoyable or worth your time. Secondly, virtual hard drive images are very, very large. We are talking several GBs in size. Downloading that many bites is not something you want to do on a dial-up Internet connection. It also means you need a lot of available disk space on your day-to-day computer. (I strongly recommended using an external USB hard drive if you only have one hard drive in your computer.) Finally, “free” usually means using a trail or time-restricted version that will expire. As a matter of fact, you can easily loose your entire development environment if you don’t backup your files before a time-bomb renders your virtual machine unusable. In other words, use at your own risk.

Now that we have a solid foundation and development environment up and running using Microsoft-based solutions, let’s keep moving forward.

Thanks for visiting and till next time,

Mark A. Wilson

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Thursday, April 30, 2009 10:12 PM | Feedback (0)

Mark A. Wilson


Hello. My name is Mark and this is my first blog entry.

I took my first steps in the early 1980s when my father brought home the Commodore 64 followed very shortly by the Osborne Executive. I was hooked. Since then, I have never been without at least one computer. As a result, I pursued a career in Information Technology with the explicit focus of building software applications that help–not hinder–people. After all, computers are overly complicated and generally unfriendly enough. Let's strive to make things better.

So what exactly is Developer Infra? It is my search to identify what it takes to enable software development. The key word being enable:

transitive verb
  1. to provide with the means or opportunity
  2. to make possible, practical, or easy
  3. to cause to operate
  4. to give legal power, capacity, or sanction to

-Merriam-Webster Dictionary definition of 'enable'.

Like computers, software development is often overly complicated and generally viewed unfriendly. It does not need to be that way. In my opinion, we need to utilize things that will allow us to focus exclusively on business logic. After all, that is what brings real value to the business and that is our ultimate goal. Right?

I invite you to join me on this journey. Along the way, I hope to collect useful developer infra – articles and links that refer a reader to things that enable software development. I do not pretend to be an expert on all things nor a self-proclaimed computer guru. Even I recognize I have much to learn. So I also invite you to leave a comment. Please do not hesitate to share your knowledge or provide constructive criticism. Together, we can keep moving forward.

Around here, however, we don’t look backwards for very long. We keep moving forward, opening up new doors and doing new things - because we're curious. And curiosity keeps leading us down new paths. We're always exploring and experimenting.

-Walt Disney

Thanks for visiting and till next time,

Mark A. Wilson

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

author: Mark A. Wilson | Posted On Sunday, March 22, 2009 2:01 AM | Feedback (0)