# Wednesday, April 16, 2008

I know that Twitter is nothing new and that many of you are already using it, but until recently I had managed to resist.  However, upon joining Microsoft and getting to know my evangelist peers, I found Twitter to be a great way to both keep in touch and coordinate with my friends and coworkers.  Furthermore, having recently moved from Colorado to Illinois, I found that Twitter is also a great way to keep in touch with distant and remote friends.  It's great to hear what's going on with my friends, like Rich Finn and Ryan McCutchen; also, unlike instant messaging technologies, we don't have to be online at the same time.

So, as you have probably guessed, I have started to Twitter; you can follow me at: http://twitter.com/wwegner/.

There are tons of people twittering away all day long, and one of the challenges I've had is filtering out the the noise.  Consequently, the one bit of advice I will give to newcomers is to start slow and resist the temptation to start following hundreds of people all at once; I did this at first, and I found it overwhelming.

As a RESTful service using simple SMS, Twitter makes it easy to interact via many different clients.  One that I've started using on my Windows Mobile 6 device is TinyTwitter.  This tool allows me to read the messages of people I'm following and post updates when I'm away from my computer.

Neat stuff.  Try it out, and feel free to follow!

posted on Wednesday, April 16, 2008 1:52:23 PM (Central Standard Time, UTC-06:00)  #    Comments [1] Trackback
# Monday, April 14, 2008

I have long been a proponent of working and developing in an environment that matches your production systems.  I've found that developing on the same O/S takes away a lot of the unknowns and guess work that occurs when you deploy from a traditional workstation O/S (like XP or Vista) to a server O/S (like Windows Server 2003 or 2008).  Don't get me wrong, Windows XP and Vista are fantastic O/S's and appropriate for all kinds of development; yet, when you're working with products like BizTalk, SharePoint, or Commerce Server, it make sense to use the same server O/S.

Windows Server 2003 has been one of my favorite O/S's.  It's stable, fast, and powerful.  I've built all kinds of custom .NET, SharePoint, BizTalk, and Commerce Server applications on Windows Server 2003 and I have never been unhappy or displeased with the O/S.  So, if I've always been happy with Windows Server 2003, why am I talking about Windows Server 2008?

This little post is probably the wrong place to get into a full discussion regarding the features and benefits of Windows Server; however, let me mention a few things that convinced me:

  • IIS 7.  There have been some tremendous changes to IIS in this latest version.  I'll post about this another time; there's too much for this post.
  • Hyper-V.  Hyper-V is a virtualization system for x64 versions of Windows Server 2008.  It's cool stuff, and again too much to get into here.  Never heard about this?  Go read about it!
  • x64.  All I can say is that I was always unhappy with the x64 version of Windows Server 2003.
  • Roles and Features.  I'll talk more about these in another post; roles and features are similar to what we've used in previous versions, only better!

There are many more reasons; this published list of the Top 10 Reasons to upgrade to Windows Server 2008 is a great start.

Alright, convinced?  Well, if for some reason you're still not convinced then I invite you to witness how slick and easy the installation process is with Windows Server 2008.  Actually, I found that it's very much like the Windows Vista installation.

1. Insert your bootable DVD or map the ISO file to your virtual machine.  Boot the machine.

Windows Server 2008 Installation (1)

2. Once the lightweight O/S has booted, click Install Now.

Windows Server 2008 Installation (2)

3. Depending on the flavor of your DVD / ISO, you will have various options to select from.  Select the operating system you want to install, and click Next.

Windows Server 2008 Installation (3)

4. You are next presented with the license terms.  Be sure and read these terms!  Once you have finished, select I accept these terms, and click Next.

Windows Server 2008 Installation (4)

5. You must next select the type of installation.  Again, depending on your flavor, you may have different options.  I always prefer to perform a fresh installation.  That's just how I role.  Make your selection, and click Next.

Windows Server 2008 Installation (5)

6. Next, you have to select the disk partition to which the operating system is installed.  Make your selection, and click Next.

Windows Server 2008 Installation (6)

7. Now comes the impressive part.  The installation for Windows Server 2008 is very much like Windows Vista - fast!  That's because the operating system is largely unpacked rather than installed.  On the first screen you'll notice that the zip is copied over to the disk partition ...

Windows Server 2008 Installation (7)

8. ... and then it is expanded.

Windows Server 2008 Installation (8)

9.  Oops.  It went so fast I missed a screen shot.  Honestly, Installing Updates is typically the slowest part of the installation, although this is more true for Vista than Server 2008 as Vista has more updates to install at this point in time.  (No, this is not a reflection or comment on the quality of Vista!)

Windows Server 2008 Installation (9)

10.  At this point I was asked to reboot.  Just do what it tells you to do.  It's smarter than we are.

Windows Server 2008 Installation (10)

11. And then the installation completes.  Yippee!

Windows Server 2008 Installation (11)

12. Before you can log into your new fresh installation of Windows Server 2008, you are told to change the administrator password ...

Windows Server 2008 Installation (12)

13. ... and then you can set a new password.  It struck me odd that this was considered "changing" the password, since there doesn't appear to have been one before.  Oh well.  Semantics.  This installation still rocks.  Click the little arrow, and then ...

Windows Server 2008 Installation (13)

14. ... your desktop is prepared!

Congratulations, you've just installed Windows Server 2008!  Altogether, I was able to go through this process in about 30 minutes on my Dell D830.  Not too shabby!  In the effort of full disclosure, here are the specifications for my machine:

Processor: Intel Core 2 Duo, 2.40 GHz
Memory (RAM): 4.00 GB
System type: 64-bit Operating System

Really, when you sit back and reflect on what operating system installations were like back in the old days (the 90's were the old days, right?) it's amazing how much more sophisticated this process has become.  It's elegant, intuitive, and fast.

While you may not be as impressed with this as I am (in which case you must try it on your own, as I know you'll become as fervent as I am) I promise you that some of my next posts will get your blood flowing.  I plan to show how easy it is to add roles (e.g. a Web Server with IIS) and features (e.g. .NET Frameworks or PowerShell) to Windows Server 2008.  Neat stuff, and again, very intuitive.

I hope this helps!

posted on Monday, April 14, 2008 8:21:57 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback

Today I decided to install the x64 version of Windows Server 2008 EE w/ Hyper-V on my Dell D830 laptop.  I will post about the experience later (it was awesome!); for now, I want to specifically mention how I was able to get the wireless working.

I should have done my due diligence prior to installing Windows Server 2008, but I like to live dangerously!  After the installation was complete (which was simple and fast), I noticed that the wireless adapter was not installed.  I tried to update the driver manually, specifically telling it to check the web, but the search didn't find anything.  I also checked both the Intel and Dell web sites to no available—I couldn't find anything for Windows Server 2008 and my wireless adapter on either web site (which is not all that surprising, since I doubt many people try to install a server O/S on their laptop).

Discouraged, I did a quick search and found a post from my colleague Keith Combs discussing his experience installing Windows Server 2008 EE on his Lenovo laptop.  Amazingly, Lenovo laptops have the same Intel wireless adapter as the Dell; furthermore, Lenovo has also published the device drivers!

To make a long story short (too late, I know), I was able to download and install the Lenovo drivers on my Dell.  Thus far (it's been about two hours) everything seems to be working perfectly!

Gotta love OEM!

Hopefully this saves a poor soul from a couple hours of digging.  Good luck!

posted on Monday, April 14, 2008 1:56:17 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback
# Sunday, April 13, 2008

I have been meaning to post an update on the book, but with the new job and move to Illinois it's been difficult to find the time.  Since Max mentioned on his blog that the Professional Commerce Server book to be published by Wiley (aka Wrox) has been canceled, I think it's appropriate for me to take the time and add a few details.

Fundamentally, the book was canceled because it was not completed in the allotted timeframe (nor the extended timeframe).  Throughout the process we were extremely committed to producing a high quality programming reference.  Writing a professional-level book of this kind—especially for a product as vast and powerful as Commerce Server—takes a significant amount of time and sacrifice.  I personally spent most of my evenings and weekends over the last year holed up in my office, working on the book; I know that the other authors similarly sacrificed a lot of their time.  Nevertheless, the book continued to fall behind schedule until it was canceled.  Wiley was very understanding and supportive throughout the entire process, but in the end things ultimately did not work out.  (I would personally like it to be noted that I do not begrudge Wiley at all.  Everyone I worked with at Wiley was extremely committed to seeing this book published, and I know that they were all disappointed with its cancellation.)

A big apology to all of you that have been excited about the book and awaiting it's release.  As I mentioned, a lot of time and effort has been put into this book, and that Wrox will not publish it is definitely a disappointment.

Having said all this, I have a question for you: what should I do with all the content written for this book?

As Max alluded to on his blog, I plan on making the content produced for this book available one way or another—right now I'm trying to figure out the best way to do this!  Currently I have around 800 pages and 24 chapters of content in various stages of completion.

Given that I know that there's been considerable interest in the community to have this book (and that I don't want to see all the hard work put into it wasted) I can think of a lot of things I can do with the content.  At the moment, though, I prefer the following two options:

  1. Find a new publisher to publish the book.  This would give the community the traditional book, but it would also probably be at least another six or seven months before anything is available.  The scope of the book would obviously have to change, given that we're sure to see a lot of updates regarding product roadmap.
  2. Self-publish the book.  This would give me a lot of freedom with regards to the publishing of the book, and means I could probably start making content available very soon.

I'm leaning towards the latter of the two choices, although I know very little about self publishing books.  If you have any comments or thoughts on this, please feel free to let me know either through comments on the blog or via e-mail (blog@wadewegner.com).

Rest assured that somehow I will make this content available!  Stay tuned for further details, hopefully to come in the next week or so.  Thanks for your support!

posted on Sunday, April 13, 2008 4:52:38 PM (Central Standard Time, UTC-06:00)  #    Comments [8] Trackback
# Monday, March 03, 2008

I'll be in Las Vegas again tomorrow to attend MIX08.  In it's third year, MIX is an opportunity to learn about Microsoft's strategy surrounding the future of the web, the latest Microsoft web technologies, rich user experiences, and Vista and IE8 forecasts.  It's a great event for technical strategists, creative designers, and technical decision makers.  This year, MIX will explore the following:

  • High-fidelity commerce, content, media, services and security
  • How new technologies can help find, retain and up-sell customers
  • The latest on Silverlight, Internet Explorer, ASP.NET, Expression, Windows Live and other key technologies through keynotes, presentations, discussions, and labs

Keynote presentations will be presented by Steve Ballmer, Guy Kawasaki, and Scott Guthrie.

Here are the tracks I'll be attending:

Wednesday, March 5
1:30 PM - 2:45 PM
T13 Working with Data and Web Services in Microsoft Silverlight 2   Delfino 4105    
        
3:00 PM - 4:15 PM
T01 Creating a RESTful API with Windows Communication Foundation   Lando 4204    
        
4:30 PM - 5:45 PM
T07 RESTful Data Services with the ADO.NET Data Services Framework   Lando 4204    
        

Thursday, March 6
8:30 AM - 9:45 AM
BCT05 Integrating Media in Silverlight Applications   San Polo 3501A    
        
10:15 AM - 11:30 AM
T26 Building Applications and Services with .NET Framework 3.5   San Polo 3501A    
        
2:30 PM - 3:45 PM
B01 The Business of Microsoft Silverlight   San Polo 3501A    
        
4:15 PM - 5:30 PM
T22 Developing ASP.NET Applications Using the Model View Controller (MVC) Pattern   Lando 4201    
        

Friday, March 7
8:30 AM - 9:45 AM
T35 Using an Internet Service Bus to Build Next Generation Applications and Services   Delfino 4001A    
        
10:00 AM - 11:15 AM
PNL17 Silverlight and Web Analytics   Delfino 4101A    
        
11:45 AM - 1:00 PM
BCT02 Designing Next Generation User Interface Experiences with Microsoft Expression Blend and Windows Presentation Foundation   Delfino 4003    
        

There were other tracks that I wanted to attend, but they were filled up.  Nevertheless, I'm excited about diving into Silverlight 2, RESTful services, the MVC pattern, and .NET 3.5. 

I hope to see you there!

posted on Monday, March 03, 2008 9:02:53 PM (Central Standard Time, UTC-06:00)  #    Comments [1] Trackback
# Monday, February 25, 2008

DPE LogoI recently accepted a job as an Architect Evangelist for Microsoft, working with the central region Developer & Platform Evangelism (DPE) team out of Downers Grove, IL.  I am extremely excited - this is a dream come true!  I've spent most of my career as a IT consultant largely focused on Microsoft technologies, and I think this role will really allow me to focus on my interests and passions.

The story behind how I first learned about the role, and how I came to get an offer, is long and (probably) pretty boring.  Suffice to say, I first heard about the opportunity back in September/October 2007 and had my "finals day" interview in January 2008.  Since accepting the job, life has been a complete whirlwind; as if starting as a new hire at Microsoft isn't hard enough (they really mean it when they say "drinking from the fire hose!"), we've also had to get our house on the market (moving from Colorado to Illinois) and figure out where we're going to live in Illinois.  I am so lucky to have a wife and family that are completely supportive and willing to go through this chaos with me.  Without them, there's no way I could handle all these changes.

So, today was my official first day as an Architect Evangelist.  It was a unique first day too, as I am down here in Las Vegas for the week for the Central Region DPE offsite meeting.  Not a bad way to start!  In all honesty, it should be a great way to get to know members of the team that I would not otherwise meet in person, as they are scattered across the country.  I was luck to be able to meet a few members of my local team during my final interview, and I can't wait to start working with them.  I was impressed by them all, and they seem genuinely friendly and easy to work with.  And they have blogs too (most of them, anyway); here they are (in alphabetical order):

Dave Bost - Developer Evangelist (DE)
Larry Clarkin - Architect Evangelist (AE)
George Huey - Architect Evangelist (AE)
Beth Humphreys - Infrastructure Architect Evangelist (IAE)
Robin Mestre - Platform Strategy Advisor (PSA)

I should also mention Hanu Kommalapti (AE), as he tech'd me over the phone last year.  Although he's not in my local group, I hope I'll have the opportunity to work with him.

I really can't wait to meet the rest of my new colleagues throughout the rest of the week.

Since accepting the job I have been asked the same question at least a few dozen times: what exactly is an Architect Evangelist?  I think it's the word "evangelist" in the title that throws people off.  And, to be honest, it threw me off for awhile too.  However, I've worked with many evangelists over the last few years and they have all been smart, energetic, and excited about what Microsoft solutions can do to affect change for businesses.  None of them have been preachers on a pulpit, but rather resources that are willing to help explain the benefits of the Microsoft stack.

As I'm new to the role, maybe some of the text from the job description will help:

The Architect Evangelist is a member of the Microsoft Developer and Platform Evangelism (DPE) group. The DPE mission is to secure platform adoption and revenue growth through evangelism, community engagement, relationship marketing and a vibrant solutions ecosystem. DPE is committed to broad Microsoft platform adoption and a vibrant ecosystem of customers, partners and developers. Through evangelism, marketing and sales, DPE helps secure the Microsoft platform, now and in the future.
The Architect Evangelist responsibilities include:

  • Drive highly visible design wins that lead to compelling evidence and customer references.
  • Being the face of Microsoft Architecture in the Local Software Ecosystem.
  • Build and maintain a vibrant local ecosystem through an integrated approach to evangelism, communities and intelligent audience marketing.
  • Being the Microsoft application platform trusted advisor for customers, partners and local Microsoft resources.
  • Subject Matter Expertise in competitive platforms.

Build and maintain deep understanding of:

  • Architectural concepts, issues and trends.
  • Microsoft architectural vision and roadmap.
  • Developer life cycle, Microsoft enterprise developer tools strategy, including VS.NET, .NET frameworks.
  • Integration of Microsoft enterprise products, technologies, and solutions into heterogeneous environments.
  • Maintain knowledge of competitor’s strategies and technologies and provide feedback to Microsoft Corp. These include J2EE, JEE, IBM Websphere, BEA Weblogic, Open Source, Sun and Oracle.

It's a tall order, and I'm sure it'll be a challenge.  But, I'm really excited about the opportunities and I can't wait to start!

Given my new role, I'm sure the character and content of this blog will change; hopefully for the better!  Please feel free to share any of your input or observations as I move forward.

posted on Monday, February 25, 2008 4:09:30 AM (Central Standard Time, UTC-06:00)  #    Comments [1] Trackback
# Sunday, January 06, 2008

Finally, back to some writing some code!  Between writing my book and some of my more recent projects, I haven't had a chance to write a lot of code.

I'm currently porting a web-based timesheet application to an ASP.NET AJAX Futures Web Application with the .NET Framework 3.5.  In writing the application, I'm trying to adhere to a number of practices:

  1. Separation of concerns
  2. Test driven development (TDD) to support changing business requirements
  3. Intuitive and fool proof user interface

It's because of #3 that I am going with an ASP.NET AJAX application.

ASP.NET AJAX uses an UpdatePanel control to support partial-page updates; essentially, controls contained within the ContentTemplate property can be updated without refreshing the entire page.  The ASP.NET WebForm also contains a ScriptManager control which allows the UpdatePanel to participate in partial-page updates without requiring custom client script code.

The following code shows these controls working together:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div id="main">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

Pretty simple.

When the button is clicked, the page does not appear to postback; instead, the button click invokes an asynchronous postback in which the page updates are limited to the controls in the UpdatePanel.  The server sends back HTML markup for only the affected elements to the browser.  Within the browser, the client PageRequestManager class performs Document Object Model (DOM) manipulation to replace existing HTML with updated markup.

Simple, but very cool stuff!  What's nice with ASP.NET 3.5 and Visual Studio 2008 is that you don't have to install anything else in order to build ASP.NET AJAX applications -- it's already built in!

Now, if it takes awhile for the server to process the postback (e.g. complex rules or badly written code <grin>), the user may not realize that the server is processing the request.  This can lead to all kinds of issues with users that are not savvy or familiar with web applications (multiple clicks, moving off the page, etc.).  Consequently, I want to tell the user that the server is processing the request and disable the controls on the page.  Let's break this down into two steps: show a message, and disable the user's interaction with the controls.

You can use the UpdateProgress control alone with the UpdatePanel to provide a message to the user during the postback.  This is very simple -- put the UpdateProgress control within the UpdatePanel like so:

<asp:UpdateProgress ID="UpdateProgress1" runat="server">
    <ProgressTemplate>
        Update in progress. Please wait ...
    </ProgressTemplate>
</asp:UpdateProgress>

This will display the "Update in progress.  Please wait ..." message to the the user while the server is processing the request.  However, it doesn't prevent the user from continuing to interact with the web application.  To provide this type of functionality, we will use the PageRequestManager to invoke some JavaScript while also using CSS and DHTML to lock down the UI.

First, we'll add a little more to our UpdateProgress control:

<ProgressTemplate>
    <div id="blur">&nbsp;</div>
    <div id="progress">
        Update in progress. Please wait ...
    </div>
</ProgressTemplate>

We'll use the "blur" and "progress" controls to overlay the controls in the UI while also providing a message to the user.  To provide the functionality we require, we need to use the following CSS elements:

#blur
{
    width: 100%;
    background-color: black;
    moz-opacity: 0.5;
    khtml-opacity: .5;
    opacity: .5;
    filter: alpha(opacity=50);
    z-index: 120;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
}
#progress
{
    z-index: 200;
    background-color: White;
    position: absolute;
    top: 0pt;
    left: 0pt;
    border: solid 1px black;
    padding: 5px 5px 5px 5px;
    text-align: center;
}

The purpose of the "blur" control is to provide a tag that lays over everything in the browser.  Since the opacity is 0.5 (and 50), it appears gray while allowing the user to continue to see the controls behind it.  However, since the "blur" control exists between the user and the other controls, the user cannot interact with any other controls.

Now, the tricky thing is that we need to run a JavaScript function to manipulate the size and positioning of the "blur" and "progress" controls; essentially, we want the "blur" to cover 100% of the browser window, and the "progress" to sit in a box in the center.  The key part is hooking in a JavaScript call to the initialization of the PageRequestManager request.  To do this, you can add the following JavaScript after the ScriptManager:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script language="javascript" type="text/javascript">
<!--
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(
    function () {
        // code here
    )
// -->
</script>

This JavaScript allows you to add JavaScript code that will process during the initialization of the postback -- a perfect place for us to grab the information we need.  Here's what the complete code looks like:

Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(
function () {
    if (document.getElementById) {
        var progress = document.getElementById('progress');
        var blur = document.getElementById('blur');
        
        progress.style.width = '300px';
        progress.style.height = '30px';
        
        blur.style.height = document.documentElement.clientHeight;
        progress.style.top = document.documentElement.clientHeight/3 - progress.style.height.replace('px','')/2 + 'px';
        progress.style.left = document.body.offsetWidth/2 - progress.style.width.replace('px','')/2 + 'px';
    }
  }
)

The exact implementation isn't that important -- what I think is important is that you can hook into the PageRequestManager to invoke some JavaScript.

Now, to help test, you can use System.Threading to make the button click sleep for two seconds:

protected void Button1_Click(object sender, EventArgs e)
{
    System.Threading.Thread.Sleep(2000);
}

Okay, now to test.  Here's the page prior to the postback:

image

Once the page is clicked, the experience changes to the following while the server is processing the request:

image

And yes, this works in Firefox too:

image

As I mentioned before, the "blur" and "progress" controls act as a screen over all the other controls, and since they are part of the ProgressTemplate these controls they are only active during server processing.  You can confirm this by removing the Sleep method -- you won't even see you the "blur" and "progress" controls, as they are not needed.

This is only one little part of what I'm trying to do with this new application -- hopefully you find it interesting!  Of course, I hope you can make it all look a little prettier than what I threw together for this post!

I hope this helps!

posted on Sunday, January 06, 2008 9:51:57 PM (Central Standard Time, UTC-06:00)  #    Comments [3] Trackback
# Sunday, December 02, 2007

I just recently discovered that Ryan McCutchen, a colleague of mine here at Statera, started blogging last month.  In this past month he has already put together a number of excellent posts discussing MOSS from an information worker, architect, and end-user perspective.

Two posts that jumped out at me:

This is definitely another blog to add to the blogroll!

posted on Sunday, December 02, 2007 10:24:32 AM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback