# 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
# Saturday, December 01, 2007

A neat trick to help you diagnose troublesome security problems.  Modify your the audit settings for process tracking, so that successes and failures are logged in your Security log.

  1. Go to Start -> Run.
  2. Type: gpedit.msc
  3. Expand Local Computer Policy -> Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy.

    image
  4. Review the "Audit process tracking" policy.
  5. Right-click the "Audit process tracking" policy, and select Properties.
  6. On the Local Security Setting folder, check the "Success" and "Failure" checkboxes under "Audit these attempts".

    image

  7. Click OK to continue.

If you define this policy setting, you can specify whether to audit successes, audit failures, or not audit the event type at all. Success audits generate an audit entry when the process being tracked succeeds. Failure audits generate an audit entry when the process being tracked fails.

These audits are now tracked in the Security log in the Event Viewer.  Here's an example of a "Detailed Tracking" event.

Event

Some additional details can be found on TechNet.

Pretty easy to configure, and very useful when you're trying to figure out why applications are not running appropriately and you think it might be related to security issues.

posted on Saturday, December 01, 2007 4:16:33 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback
# Thursday, November 29, 2007

Joe Shirey, an Architect Evangelist for Microsoft, has posted an eight-part series that discusses the Microsoft Certified Architect (MCA) program.  If you're like me and have spent time reviewing the Microsoft Certified Architect Programs web site, and wanted a more in-depth, personal understanding of the process, you should take the time to read Joe's posts in their entirety.  Joe is one of the original participants of the MCA program, and offers a lot of insight into the process.

MCA Part I - Intro - Joe talks about his initial introduction to the MCA program when it was in the beta stage, and explains his purpose for reaching out to potential candidates.

MCA Part II - Why do you want to get the MCA? - Joe points out that the MCA is only "one way to measure an architect."  He recommends that candidates take a close look at their reasons for pursuing the MCA certification.  Take a look at some of the more common reasons he has heard when talking to customers, and his responses.

MCA Part III - Preparing the documentation - To be considered for the MCA program, you have to provide a significant amount of documentation.  Joe provides recommendations on preparing this documentation, as well as choosing a project to present.  Additionally, Joe provides some suggestions on how to present yourself to the board.

MCA Part IV - Putting together your presentation - The presentation is an important part of the process, and Joe provides some thoughts and tips on how to approach it.  Additionally, he provides some insight into what will occur during the presentation, which I found useful and illuminating.  Make sure to look at his "rough set of topics" he proposes you use to pull together your presentation, and his suggestions that follow.

MCA Part V - Other things to prepare before going in front of the board - Joe points out that you either "possess or don't posses" the skills and experience required for the program, and it isn't something you can cram for at the last minute.  That said, take the time to review and brush up on your strengths and skill sets you haven't used recently.  Also, Joe suggests asking an MCA you know to perform a mock board review for you.  Joe, are you volunteering? <grin>

MCA Part VI - The Competencies - This is a fantastic post, and really goes into what the core requirements of the MCA program are all about, as well as Joe's thoughts on the official statements.  Take the time to thoroughly review this post.  Also, note that Joe focuses on the "Solutions Architect" competency, instead of the Infrastructure or product specific competencies.

MCA Part VII - Going in front of the board - The board will grill you for two straight hours.  Joe outlines the process from a board member's perspective and also provides suggestions on things you can do to help yourself out during the review.  This is a great post, and provides a lot more insight into the process the board goes through in formulating and making their decisions.

MCA Part VIII - Getting your results - The elation of passing or the disappointment of not.  Joe shares his thoughts on the potential outcomes.  Regardless of the outcome, Joe suggests that you take a look at the feedback and better yourself.

Personally, I have been interested in the MCA program since I heard about it six months (or so) ago, and having read Joe's posts I find myself even more interested.  If nothing else, I am impressed by the amount of thought and effort put into the process by the board, and how they try to drill down into the candidate to see how they truly measure up to the "straw man".  Additionally, I was struck by the fact that the board wants to see candidates succeed, and that the rigor of the process is to reinforce that the program is a premier certification that is much more than an effort by Microsoft to push their product stack and solutions.

Again, if you're interested in the MCA program, take a look at this posts as well as Joe's blog.

posted on Thursday, November 29, 2007 10:24:08 PM (Central Standard Time, UTC-06:00)  #    Comments [1] Trackback
# Sunday, November 25, 2007

I learned about the FreeRice program from James McGovern's blog post.  Not only does it appear to be a worthwhile program, but the it was fun to test my vocabulary.

I stopped after providing 500 grains of rice.  I realized that my 500 grains wouldn't make a difference unless I also spread the word.  So please, dear reader, take a moment and test your own vocabulary!

posted on Sunday, November 25, 2007 9:23:47 PM (Central Standard Time, UTC-06:00)  #    Comments [1] Trackback

There has been some excellent activity by some heavy-weights in the Commerce Server world.  Sadly, I haven't been contributing very much on my blog, as I am desperately trying to complete my book.

It started with Søren Spelling Lund's two-part series (and maybe more?) on what it's like developing with Commerce Server 2007.

In this post, Søren highlights the high-level of security that has gone into Commerce Server 2007, calling it "both a blessing and a curse."  He attributes this to the flexibility and granularity of the security system, in addition to the complexity that comes with it.  Commerce Server 2007 makes use of the Windows Authorization Manager for security.  See the following links for more information: Developing Applications Using Windows Authorization Manager, and Managing Authorization Policies.

Søren also highlights the Distributed Transaction Manager and use of MSDTC and System.Transaction in the .NET Framework 2.0.

Søren discusses three different data access systems for Commerce Server 2007, based on the subsystem with which you're working (i.e. the Profile system, the Catalog system, and the Order system).  Take a look at his post for the specifics.  I would also suggest you take a look at MSDN for some additional information on developing with Commerce Server 2007.

Not to be out-done by Søren, Max Akbar took some time out of his busy schedule to post a great article on caching and Commerce Server 2007.

Max highlights a number of important topics, including: the Catalog cache, Web.Config settings, refreshing the cache, the cache size, the cache location, how to use your own caching.

As always, Max's post is a great blend of information and code snippets.

Last, but certainly not least, Tom Schultz contributed to the discussion of caching by highlighting a mixed-authentication solution for the SiteCacheRefresh HTTP handler.

Tom shows how the SiteCacheRefresh HTTP handler provides Commerce Server with caching capabilities.  He goes beyond this, however, when he points out that by default the ASP.NET site uses forms authentication.  Since the web site can support either forms or windows authentication, a mixed authentication model is required.  Tom shows you how to construct this by taking aspects of the Starter Site

All in all, great stuff!

posted on Sunday, November 25, 2007 2:50:31 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback
# Sunday, November 18, 2007

Just noticed these two gems (again from the MSDN Architecture Center):

Guide to Migrating from Oracle to SQL Server 2005

Summary: "This white paper explores challenges that arise when you migrate from an Oracle 7.3 database or later to SQL Server 2005. It describes the implementation differences of database objects, SQL dialects, and procedural code between the two platforms. The entire migration process using SQL Server Migration Assistant for Oracle (SSMA Oracle) is explained in depth, with a special focus on converting database objects and PL/SQL code."

Guide to Migrating from Sybase ASE to SQL Server 2005

Summary: "This white paper covers known issues for migrating Sybase Adaptive Server Enterprise database to SQL Server 2005. Instructions for handling the differences between the two platforms are included. The paper describes how SQL Server Migration Assistant, the best tool for this type of migration, can help resolve various migration issues."

I definitely could have used these two documents a few months ago!

I hope this helps!

posted on Sunday, November 18, 2007 1:32:59 PM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback

I have recently been scouring MSFT resources for information related to architecture and the role of enterprise architects, and I have found two resources that I wanted to highlight:

MSDN Architecture Center

This is a great central hub for architectural information related to MSFT technologies, platforms, and products.  There are also a number of excellent architects that deal with topics such as service oriented architecture (SOA), Software + Services (S+S, SaaS), security, enterprise architecture, agile development, and more.  Additionally, it is tied into a number of great blog feeds by various architects in the MSFT community.

The Microsoft Architecture Journal

As an example, Journal 13 is focused on Software + Services (S+S).  As such, topics include: The Internet Service Bus, Project Astoria, Implications of Software + Services Consumption for Enterprise IT, Enterprise Mashups, Microsoft Office as a Platform for Software + Services, and A Planet Ruled by Software Architectures.  Additionally, it features profiles, such as the profile on Ray Ozzie this month.

And the best part of it is that, after you register, you can get a free subscription to the MSFT architecture journal.

You can also subscribe to the RSS feed.  Good stuff!

As a side note, I'll admit that I need to find more resources like this that are not MSFT specific.  While I believe MSFT does a great job of addressing architectural issues that are agnostic of platform and technology, I need to continue to diversify the helpings on my plate!

If any one has suggestions, please send them my way!

posted on Sunday, November 18, 2007 9:58:53 AM (Central Standard Time, UTC-06:00)  #    Comments [0] Trackback