Software Design Engineer in Test (SDET) Opening in Microsoft.com Community Technologies

Are you intrigued by the world of open source development? Are you interested in enabling shared source development at Microsoft? We are building the premier collaborative software development platform for the .NET developer community and need an experienced Software Design Engineer in Test (SDET) to help architect, design test and deliver a new suite of on-line services to support community collaborative development activities for GotDotNet, including an all-new version of Workspaces. This is a unique opportunity to re-shape the way that Microsoft interacts with the developer community.

The individual will work with program management and development team to scope out features and understand the customer requirements, and work side-by-side with vendor resources to ensure the quality of the application. The candidate should have a demonstrated track record of delivering test automation, quality requirements, deliverables that exceed commitments. The candidate should also be comfortable presenting technical material to internal and external audiences.

Candidate would be responsible for writing and executing test plans and cases, designing and developing test tools, debugging and reporting code bugs and pushing quality upstream. Qualifications for this position include a minimum of 3-7 years of commercial software development and testing experience. In addition, demonstrated technical leadership, strong problem solving skills, and prior experience tester is required. Expertise in the following areas is highly desirable: ASP.NET, SQL, C#, and Test-Driven Development. Experience developing web-based applications, object-oriented design, and strong communication skills are required. The ideal candidate will have a BS or MS in Computer Science.

How do I get this job?
Reply to Vikas Ahuja (remove .online. from e-mail address) with a resume and he’ll get things started

More info about Communities test team and SDET role
http://spaces.msn.com/vikasahuja/blog/cns!1532F7259C5CFAF8!491.entry

Tags: Jobs | Microsoft | SDET

Mix06: Day One - BillG Keynote

I have added notes from Mixo6 Day one, BillG's keynote to my MSDN blog.

http://blogs.msdn.com/dseven/archive/2006/03/20/Mix06_Day1_BillG.aspx

Test Driven Development with Visual Studio Team System

On Monday, February 27th I gave a presentation at the DotNetUsers.org User Group meeting in Redmond, WA. The slides and demo code are here.

The demo in the session was taken from Test Driven Development with Microsoft .NET (MSPress), by my co-worker, Jim Newkirk (and Alexei Vorontsov).

Here is the session abstract:
In this session you will learn how to use the unit testing features built in to Microsoft Visual Studio Team System. You will learn how to set up a project for unit testing, write a variety of unit tests, and see how they help ensure code quality for developers. This session will be presented in C#.

I will be presenting this again on March 18th at the Boise CodeCamp.

Job Opening: Software Development Engineer in Microsoft.com Communities Technologies Team

I am looking for a star developer to add to my team - the team that builds the community infrastucture for Microsoft.com, such as web forums (http://forums.microsoft.com/), blogs (http://blogs.msdn.com/), GotDotNet (http://www.gotdotnet.com), Codezone Community Search and "Smart Components."

Margaret Mead once said,

"Never doubt that a small, group of thoughtful, committed citizens can change the world. Indeed, it is the only thing that ever has."

That pretty much describes the Microsoft.com Communities Technologies team.  We have been devoted to enabling Microsoft’s vibrant communities through a series of technologies that facilitate the interaction, participation, and collaboration of our customer and partner ecosystem.  Through technologies like web forums (http://forums.microsoft.com/), blogs (http://blogs.msdn.com/), GotDotNet (http://www.gotdotnet.com), Codezone Community Search and "Smart Components," we’ve helped connect our customers and partners not only to Microsoft but also to one another.

We are looking for a Software Development Engineer to help us deliver the next generation of online community technologies; an integrated, consistently designed set of hosted applications, Web services, and modular components that are available to Microsoft.com Web publishers, Microsoft product teams, online partners, and third-party community owners.  These customers will use our platform to build custom community experiences into both online and offline client environments, where users can browse, search, post, share, and contribute content or code. 

If you want an opportunity to really change the way customers interact with both Microsoft as well as with the community, this is the place for you. We want creative, passionate people who want to deliver a truly awesome experience to our customers and want to build an innovative and compelling vibrant Community.

The ideal candidate is a fantastic developer passionate about “customer experience” and who understands backend processes. You must have at least 5 years experience building and shipping high quality applications as a developer. You should have been through at least one full product cycle from design through to delivery. You should be well-versed in C# and experienced with web technologies (HTML/XML/XSL/ASP.NET/Jscript). Ideally you possess some of the following experiences: an in-depth knowledge of SQL, software as a service, and large scale web site design. BA/BS in Computer Science or related discipline is required.

Please send resumes to Doug Seven (remove .online. from e-mail address).

People are Talking about Codezone Community Search

Darren Neimke of ProjectDistributor.com recently posted some info about the project I work on, FCS-Search (commonly known as Codezone Communtiy Search).

Open Call for Speakers - .NET Developer's Association

Are you an expert in the .NET Framework? Has Visual Basic .NET got you all excited? Does your knowledge of VSTS scare the average passer-by? You should come speak at our User's Group!

The Redmond/Seattle .NET Developer's Association is looking for speakers. We have a meeting each Monday at 7:00 PM on the Microsoft main campus. We are in need of speakers through the rest of the year (see our schedule). Each month we have a meeting for Web Developers, Beginners, Database Developers, Visual Basic Developers, and a general meeting. You can speak at any one of these. Just contact the Event Coordinator. While we can't pay you, we can honor you with free pizza and a beer or two (after the meeting).

ASP.NET 2.0: Building Data-Driven Web Sites (Slides and Demos)

Last night I gave a presentation at the .NET Developer's Association in Redmond/Seattle. Following is a description of the session, and a link to download the slides and demo code. All code is using Visual Studio 2005 Beta 2 build.

ASP.NET 2.0: Building Data-Driven Web Sites

This session discusses the fundamentals of data access and how to render data in a Web site using the new data-source and data-bound controls in ASP.NET 2.0. Topics covered include binding to a SQL database; performing sorting, paging, update, insert, and delete operations; building data access and business object layers; rendering customization using templates; and improved performance through caching.

Slides & Demos: http://www.dougseven.com/samples/DataDrivenWebAppsASPNET20.zip

Special thanks to Bradley Millington for providing the sample code.

Windows Vista Forums on DotNetJunkies

I created five new threaded discussion forums for Windows Vista (the operating system formerly known as "Longhorn"):

  • AERO
    AERO stands for Authentic, Energetic, Reflective, and Open and is the user experience guidelines for Windows Vista, governing the look and feel of the operating system.
  • Windows Presentation Foundation (Avalon)
    Windows Presentation Foundation (formerly code name "Avalon") is the presentation subsystem class libraries in WinFX.
  • Windows Communication Foundation (Indigo)
    Windows Communication Foundation (formerly code name "Indigo") is a set of .NET technologies for building and running connected systems. It is a new breed of communications infrastructure built around the Web services architecture.
  • InfoCard
    "InfoCard" is the code name for a WinFX component that provides the consistent user experience required by the identity metasystem.
  • RSS in Windows Vista
    Today RSS is primarily used for news sites, blogs, and increasingly for audio-based serialized content. But RSS has the potential for broader reach and to more deeply integrate the information it delivers across applications of various kinds.
     

Search Scoping vs. Search Filtering

In a meeting today I participated in a discussion about search (specifically searching of community resources of course). In the discussion we realized there was a lack of clarity on the difference between a scoped search and a filtered search - depending on who you asked they were either the same thing or very different. So I did a little research, and here are my findings.

The Problem Statement
Here are a few variations of the positions in the meeting:

  • Is scoping the same as filtering?
  • Is scope something you pass into a search and filter is something you do with the result set to reduce it?
  • Is scope the limitation of a search to a specific set of resources, and filter is a way of excluding content based on content attribution?

Research
According to Dictionary.com, scope is:

scope (n.)
 1. The range of one's perceptions, thoughts, or actions.
 2. Breadth or opportunity to function. See Synonyms at room.
 3. The area covered by a given activity or subject. See Synonyms at range.
 4. The length or sweep of a mooring cable.
 5. Informal. A viewing instrument such as a periscope, microscope, or telescope.

Also according to Dictionary.com, filer is:

fil·ter (n.)
 1.
  a. A porous material through which a liquid or gas is passed in order to separate the fluid from suspended particulate matter.
  b. A device containing such a material, especially one used to extract impurities from air or water.
 2.
  a. Any of various electric, electronic, acoustic, or optical devices used to reject signals, vibrations, or radiations of certain frequencies while allowing others to pass.
  b. A colored glass or other transparent material used to select the wavelengths of light allowed to reach a photosensitive material.
 3. Computer Science. A program or routine that blocks access to data that meet a particular criterion: a Web filter that screens out vulgar sites.

I continued to search around looking at other resources. Here are a couple of other references:

UseIt.com - Scoped Search: Sometimes special areas of a site are sufficiently coherent and distinct from the rest of the site that it makes sense to offer a scoped search: restricted to search that subsite only (the search scope).
Panoptic Search says, "...scoped search achieves a similar effect to the Google site:query operator, but allows specification of a comma-separated list of sites to be included or excluded."

Summary
My assessment, which of course should be taken as the final and authoritative word on the topic, is that scoping is the act of limiting a search to a set of resources (websites, sub-sites, etc.) while filtering is the act of excluding content based on contextual things, such as attribution or keywords. An example would be:

Search only dotnetjunkies.com and sqljunkies.com for the term "SqlDataAdapter" and return only content that included code in C#

In this example, the query term is "SqlDataAdapter", the scope is dotnetjunkies.com and sqljunkies.com, and the filter is only content with C# code.

There it is, the definitive difference between a scoped search and a filtered search, and how they can work together.

FCS and Codezone: Web Service vs. RSS vs. Crawling

Recently I was asked why we are using a crawler-based system for the Federated Community Services instead of RSS or Web Services. This is an excellent question, and it requires a little history.

Federated Community Services (FCS) is a Web Service platform that will expose community features to a set of websites, specifically the Codezone Community websites and the Microsoft subsidiary websites. The services will include a variety of useful things, and the first one we are launching is the Codezone Community Content Search service, which I usually refer to simply as Search. The Search service idea dates back to a program that Microsoft started in 2001 called CodeWise. The CodeWise community was made up of a number of both online and offline community resources, such as websites, training companies and magazines. At the time I was a CodeWise member as both an author and the owner of DotNetJunkies.com.

As the program progressed, Microsoft introduced the concept of a community search feature in Visual Studio. At the time it was hoped that it could get in the Everett release (VS.NET 2003), but unfortunately it didn't make the cut. Plans went into full motion to include the community search concept in Whidbey (VS 2005).

There had been many discussions between Microsoft and the CodeWise sites about how the search feature should work, and a couple key features were identified:

  1. The site owners must be able to control what content is included in the search index.
  2. The search results should list the title, description and the source URL of the content.
  3. The user should be redirected to the actual content on the page - the content itself should never be syndicated.
There were other features and issues, but these were the critical and defining features. The solution was that the sites would expose the information to Microsoft through a Web Service. An aggregator that would call a Web Service hosted by each of the CodeWise websites on a nightly basis. The Web Service would expose information about what content on the site was new, what had changed and what had been deleted. The aggregator would use this information to update the search index.

From the time this model was announced many of the site owners expressed that they didn't like this idea. It meant that they had to create and maintain a Web Service to expose this information. For some it was difficult because they didn't have the time or resources, for others it was difficult because their sites were static content, not data-driven content, making it difficult to expose in a Web Service. Many sites had asked why Microsoft couldn't just crawl the sites using spidering technology that has existed for years, rather than requiring the site owners to build a Web Service. There was a large expression that being included in the search index should mean that the site owners had to build new features to accommodate Microsoft, but that Microsoft should invest in using technology that had little or no impact on the sites.

The Web Service aggregator system went into place. In launched late primarily because many of the site owners didn't have their Web Services ready in time. Finally the community search was available to the public in the Visual Studio 2005 beta. Unfortunately there wasn't a lot of content getting into the system. Out of the 30+ sites that were part of the CodeWise program, only 12-sites had created a Web Service that worked reliably, and only 4-sites were exposing content through their service on a regular basis. Basically it was easy to say that while this solution was a good technical solution, it was not a good practical solution.

In October 2004 I was asked to contract to Microsoft for a year (I have since accepted a full-time position on this project) to fix what was wrong with the CodeWise program from a technical perspective (Amy Sorokas is the marketing superwoman). Specifically I was charged with fixing the CodeWise Search problem, which was in jeopardy of getting pulled from Whidbey due to lack of participation from the CodeWise sites. I began looking at the history of the program, which I was intimately aware of, and at the requests, complaints, and feedback provided over the 4-years of the program. It became quickly apparent that the problems were based around three things:
  1. It was too difficult for a site owner to get their content included in the search index.
  2. It was too difficult, or there was too little benefit for a content publisher (site owner or author) to attribute their content according to a taxonomy established by Microsoft.
  3. If the site owners were going to expose their content in a search index, they wanted to be able to expose the search service as well.
I (along with a couple others) determined that the solution was to be tackled in three stages.
  1. Reduce the barrier to entry for getting content into the search system and add the ability for full-text search.
  2. Determine a way to automagically attribute the content reducing the amount of attribution we ask the site owners to do.
  3. Expose the search functionality as a Web Service for the site owners to implement if they chose.
The solution to #1 was to move away from a system that required the site owners to build a Web Service. We looked into the possibility of RSS, but that didn't provide any better results - the site owners were still required to build a feed based on our specification. Ultimately we wanted the site owners to have to do as little as possible. We revisited the idea of a crawling or spidering mechanism. Something that wouldn't require very much of the sites, and would rely on existing technology - HTTP and HTML.

We met with some internal teams and eventually found a solution developer by our Assistance Platform team. It is a crawler that we can point to a master index, which is simply a list of URLs that we want to index. The URLs we point to are actually similar indexes on each of the sites - a list of links the site owner wants us to index. Nothing but basic HTML. This could be generated dynamically (for data-driven sites) or it could be a static page - its just HTML. The links in the index point to the actual content we will index. We don't follow links off of the site, and we don't go any deeper than the content page listed. This ensures that we are only indexing what the site owner wants us to.

We have been working on this solution for a while, and actually have the crawler running in production now. We are finishing the code that plugs Visual Studio 2005 into our index, and the Web Service for exposing the Search service. The Search service should be online July 19, 2005, barring any last minute VS2005 integration bugs that come up. The changes will show up in Visual Studio 2005 within a few weeks of that (I haven't gotten a firm date yet).

So, in a nutshell, the reason we chose a crawler over a Web Service or RSS was based on feedback we had gotten from the CodeWise (now rebranded to Codezone) Community site owners themselves. There was a definite need to create a solution where the site owners didn't have to build something to expose a service or feed to us, and crawling and indexing technology proved to be a solution that significantly lowers the technical barrier to entry.

More on Codezone and FCS to come soon.

Barbecues and Name Dropping

This weekend I went to a barbecue at Eric Ewing's. Eric and Bruce do this annual get together at their incredibly wonderful home on Lake Washington. While there I chatted with Robert Scoble about when we are launching the Federated Community Services and when the new Codezone index will be exposed in Visual Studio 2005. I talked with Jeff Sandquist about the new Mustang GT (which apparently Scobelizer was not too impressed with), and I got beaten up by Kevin Briody for not having a good personal website, and not representing the Sammamish Plateau by not blogging enough.

Kevin had mentioned that Betsy Aoki had blogged about me in regard to her trip to TechEd Europe last week. Sure enough she did - she thinks I look like a pirate.

I am newly recommited to blog more, and more specifically blog a lot more about Codezone and the Federated Community Services. I will occassionally toss is a blog post about non-tech stuff, such as wake baording, poker, or trips to the Home Depot (You can do it. We can help.).

Expect a Codezone blog later today.

Slides from .NETDA Meeting with Brian Goldfarb

Here is a link to Brian Goldfarb's prenestation at the 5/2/05 meeting of the .NET Developer's Association entitled Visual Studio Team System for Web Developers.

Sample Code: ASC251 Working with the Security Controls in ASP.NET 2.0

Here is sample code and slides from my session at ASP.NET Connections.

ASC251: Working with the Security Controls in ASP.NET 2.0
Server controls are great for abstracting typical functionality in your application, so where are the security server controls? In this session, you will be introduced to each of the new security controls in the ASP.NET v2.0 Framework – Login, Login Status, Login View, and Password Recovery. You will learn how to implement these controls as part of the authentication schema of your applications.